package com.utils.checkutil;

import com.bean.Role;
import com.bean.User;
import com.dto.BaseInfoDTO;
import com.dto.user.UserBaseInfoDTO;
import com.dto.user.UserUpdateDTO;
import com.utils.ParamUtil;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author FatterShadystart
 * @create 2023-02-28 0:57
 */
public class UserCheckUtil {
    /**
     * 参数检查 BaseInfo不含分页参数
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkBaseInfoNoPage(UserBaseInfoDTO userBaseInfoDTO) {

        BaseInfoDTO baseInfoDTO = userBaseInfoDTO.getBaseInfoDTO();
        if (ObjectUtils.isEmpty(baseInfoDTO)) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getCreatorId())) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getUpdatorId())) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 参数检查updatorId
     *
     * @param updatorId
     * @return
     */
    public static boolean checkUpdatorId(Long updatorId) {

        if (ObjectUtils.isEmpty(updatorId)) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 参数检查 BaseInfo含分页参数
     *
     * @param baseInfoDTO
     * @return
     */
    public static boolean checkBaseInfoYesPage(BaseInfoDTO baseInfoDTO) {
        if (ObjectUtils.isEmpty(baseInfoDTO)) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 参数检查 用户注册
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserRegister(UserBaseInfoDTO userBaseInfoDTO) {
        User user = userBaseInfoDTO.getUser();
        Role role = userBaseInfoDTO.getRole();
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (ObjectUtils.isEmpty(role)) {
            return false;
        }
        if (StringUtils.isEmpty(user.getEmail())) {
            return false;
        }
        if (StringUtils.isEmpty(user.getPassword())) {
            return false;
        }
        if (StringUtils.isEmpty(role.getUserRole())) {
            return false;
        }
        return true;
    }

    /**
     * 参数检查 用户登录
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserLogin(UserBaseInfoDTO userBaseInfoDTO) {
        User user = userBaseInfoDTO.getUser();
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (StringUtils.isEmpty(user.getEmail())) {
            return false;
        }
        if (StringUtils.isEmpty(user.getPassword())) {
            return false;
        }

        return true;
    }


    /**
     * 参数检查 所有用户查询
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserQuery(UserBaseInfoDTO userBaseInfoDTO) {
        BaseInfoDTO baseInfoDTO = userBaseInfoDTO.getBaseInfoDTO();
        if (ObjectUtils.isEmpty(baseInfoDTO)) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getPageNumber())) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getPageSize())) {
            return false;
        }
        return true;
    }

    /**
     * 参数检查 用户查询带条件
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserQueryByCondition(UserBaseInfoDTO userBaseInfoDTO) {
        BaseInfoDTO baseInfoDTO = userBaseInfoDTO.getBaseInfoDTO();
        User user = userBaseInfoDTO.getUser();
        if (ObjectUtils.isEmpty(baseInfoDTO)) {
            return false;
        }
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getPageNumber())) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getPageSize())) {
            return false;
        }
        return true;
    }

    /**
     * 参数检查 用户插入
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserInsert(UserBaseInfoDTO userBaseInfoDTO) {
        User user = userBaseInfoDTO.getUser();
        Role role = userBaseInfoDTO.getRole();
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (ObjectUtils.isEmpty(role)) {
            return false;
        }
        if (StringUtils.isEmpty(user.getEmail())) {
            return false;
        }
        if (StringUtils.isEmpty(user.getPassword())) {
            return false;
        }
        if (StringUtils.isEmpty(role.getUserRole())) {
            return false;
        }
        return true;
    }

    /**
     * 参数检查 用户更新
     *
     * @param userUpdateDTO
     * @return
     */
    public static boolean checkUserUpdate(UserUpdateDTO userUpdateDTO) {
        User user = userUpdateDTO.getUser();
        Boolean isAdmin = userUpdateDTO.getIsAdmin();
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (ObjectUtils.isEmpty(isAdmin)) {
            return false;
        }
        if (StringUtils.isEmpty(user.getPassword())) {
            user.setPassword(null);
        }

        return true;
    }

    public static List<User> buildUserListLogin(User user) {
        List<User> userList = new ArrayList<>();
        userList.add(user);
        return userList;
    }

    public static List<User> buildUserListInsert(User user) {
        List<User> userList = new ArrayList<>();
        userList.add(user);
        return userList;
    }

    public static List<User> buildUserListUpdate(User user) {
        List<User> userList = new ArrayList<>();
        userList.add(user);
        return userList;
    }

    /**
     * 参数检查 用户删除
     *
     * @param userBaseInfoDTO
     * @return
     */
    public static boolean checkUserDelete(UserBaseInfoDTO userBaseInfoDTO) {
        User user = userBaseInfoDTO.getUser();
        Role role = userBaseInfoDTO.getRole();
        BaseInfoDTO baseInfoDTO = userBaseInfoDTO.getBaseInfoDTO();
        if (ObjectUtils.isEmpty(user)) {
            return false;
        }
        if (ObjectUtils.isEmpty(role)) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO)) {
            return false;
        }
        if (StringUtils.isEmpty(user.getEmail())) {
            return false;
        }
        if (StringUtils.isEmpty(role.getUserRole())) {
            return false;
        }
        if (ObjectUtils.isEmpty(baseInfoDTO.getUpdatorId())) {
            return false;
        }
        return true;
    }

    public static List<User> buildUserListByUserIdList(List<Long> userIdList) {

        List<User> userList = new ArrayList<>();
        for (Long userId : userIdList) {
            User user = new User();
            user.setUserId(userId);
            userList.add(user);
        }
        return userList;
    }

    public static List<Role> buildUserListByUserRoleList(Integer size, String userRole) {
        List<Role> roleList = new ArrayList();
        for (int i = 0; i < size; i++) {
            Role roleAdd = new Role();
            roleAdd.setUserRole(userRole);
            roleList.add(roleAdd);
        }
        return roleList;
    }


    public static List<User> buildUserListRegister(User user, BaseInfoDTO baseInfoDTO) {
        List<User> userList = new ArrayList<>();
        //设置baseInfo的信息到user中
        ParamUtil.setBaseInfoNoPage(user, baseInfoDTO);
        userList.add(user);
        return userList;
    }

    public static List<Long> buildUserRoleIdList(Long userRoleId) {
        List<Long> userRoleIdList = new ArrayList<>();
        userRoleIdList.add(userRoleId);
        return userRoleIdList;
    }

    public static List<Role> buildRoleList(String userRole) {
        List<Role> roleList = new ArrayList<>();
        Role role = new Role();
        role.setUserRole(userRole);
        roleList.add(role);
        return roleList;
    }
}
